//package com.andooco.dataq.service.filedata;
//
//import com.alibaba.fastjson.JSON;
//import com.andooco.dataq.service.config.SessionConfig;
//import com.andooco.dataq.service.filedata.dto.FileDataDto;
//import com.andooco.dataq.util.*;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//import org.springframework.web.multipart.MultipartFile;
//
//import java.io.File;
//import java.io.UnsupportedEncodingException;
//import java.net.URLDecoder;
//import java.net.URLEncoder;
//import java.util.ArrayList;
//import java.util.List;
//import java.util.UUID;
//import java.util.function.Predicate;
//
///**
// * 文件资料操作管理
// *
// * @author andooco
// * 20201203
// */
//@Slf4j
//@Service("FileDataService")
//public class FileDataService {
//
//    @Autowired
//    private SessionConfig sessionConfig;
//
//    /**
//     * 查询文件资料列表
//     * 先在缓存中查询，如果缓存中没有功能块信息，加载功能块CSV文件到缓存中
//     *
//     * @param fileName
//     * @return
//     */
//    public List<FileDataDto> findFileDataList(String fileName) throws UnsupportedEncodingException {
//        log.info("进入findFileDataList 查询文件资料入口");
//        List<FileDataDto> fileDataDtos = getFileDataDtosCached();
//        if (StringUtils.isBlank(fileName)) {
//            return fileDataDtos;
//        } else {
//            //定义filters
//            Predicate<FileDataDto> strFilter = (fileDataDto) -> (fileDataDto.getFileName().contains(fileName));
//            List<FileDataDto> fileDataDtoList = new ArrayList<>();
//            fileDataDtos.stream()
//                    .filter(strFilter)
//                    .forEach((strlist) -> fileDataDtoList.add(strlist));
//            return fileDataDtoList;
//        }
//    }
//
//    /**
//     * 保存/更新功能块列表【funcUid不为空则为更新操作】
//     * 先在缓存中查询，如果缓存中没有功能块信息，加载功能块CSV文件到缓存中
//     *
//     * @param fileName
//     * @return
//     */
//    public String saveList(MultipartFile fileData, String fileName, String remark, String username) throws UnsupportedEncodingException {
//        log.info("进入FuncService 保存/更新功能块入口:{}", JSON.toJSONString(fileName));
//        //保存数据到csv文件中
//        FileDataDto fileDataDto = new FileDataDto();
//        fileDataDto.setFileUid(UUID.randomUUID().toString().replaceAll("-", ""));
//        if (fileData.isEmpty()) {
//            return "文件为空";
//        }
//        fileDataDto.setFileName(fileName);
//        fileDataDto.setFileType(fileData.getContentType());
//        fileDataDto.setRemark(remark);
//        fileDataDto.setUsername(username);
//        fileDataDto.setUploadDate(CommonUtils.generateRequestDate());
//        File dest = new File(CommonConstants.DATA_ROOT_PATH + "/file/" + fileDataDto.getFileUid() + "/" + fileDataDto.getFileUid() + fileData.getOriginalFilename().substring(fileData.getOriginalFilename().lastIndexOf(".")).toLowerCase());
//        if (!dest.getParentFile().exists()) {
//            dest.getParentFile().mkdirs();
//        }
//        try {
//            // 保存文件
//            fileData.transferTo(dest);
//            if (fileDataDto.getFileType().toLowerCase().contains("pdf")) {
//                //获取pdf页数
//                fileDataDto.setTotalPage(PdfUtil.getPdfPages(dest) + "");
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//            return "保存文件出错";
//        }
//        String[] dataList = new String[8];
//        List<FileDataDto> fileDataDtos = getFileDataDtosCached();
////        //新增数据到缓存中
//        fileDataDtos.add(fileDataDto);
//        log.info("追加数据到csv文件中：{}", JSON.toJSONString(fileDataDto));
//        convertsToList(dataList, fileDataDto);
//        CSVUtils.writeDataToCsvFile(CommonConstants.DATA_ROOT_PATH, CommonConstants.FILE_DATA_PATH, dataList, CSVUtils.HEAD_ARR_FILE);
//
//        return StatEnum.SUCCESS.getCode();
//    }
//
//    public String transferRead(String fileUid) throws UnsupportedEncodingException {
//        String rootPath = CommonConstants.DATA_ROOT_PATH + "/file/" + fileUid + "/";
//        File targetFile = new File(rootPath + fileUid + ".pdf");
//        if (targetFile.exists()) {
//            //获取上次阅读页数，如果没有则取1
//            List<FileDataDto> fileDataDtos = getFileDataDtosCached();
//            //定义filters
//            Predicate<FileDataDto> strFilter = (fileDataDto) -> (fileDataDto.getFileUid().equals(fileUid));
//            List<FileDataDto> fileDataDtoList = new ArrayList<>();
//            fileDataDtos.stream()
//                    .filter(strFilter)
//                    .forEach((strlist) -> fileDataDtoList.add(strlist));
//            if (fileDataDtoList.size() == 0) {
//                return "文件未找到";
//            }
//            FileDataDto fileDataDto = fileDataDtoList.get(0);
//            String currentPage = fileDataDto.getCurrentPage();
//            boolean pageChange = false;
//            if (StringUtils.isBlank(currentPage) || "0".equals(currentPage)) {
//                currentPage = "1";
//                pageChange = true;
//            }
//            //暂定为png方案，html报错
//            for (int i = 0; i < Integer.parseInt(fileDataDto.getTotalPage()); i++) {
//                int cuPage = i + 1;
//                String htmlPath = rootPath + fileUid + "_" + cuPage + ".png";
//                String htmlPathSmall = rootPath + fileUid + "_" + cuPage + "_small.png";
//                File readFile = new File(htmlPath);
//                if (!readFile.exists()) {
//                    //如果不存在，则开始转换
//                    PdfUtil.pdf2Image(targetFile, htmlPath, cuPage, 100f);
//                }
//                File readFileSmall = new File(htmlPathSmall);
//                if (!readFileSmall.exists()) {
//                    //如果不存在，则开始转换
//                    PdfUtil.pdf2Image(targetFile, htmlPathSmall, cuPage, 10f);
//                }
//            }
//            //同步当前页码
//            if (pageChange) {
//                fileDataDto.setCurrentPage(currentPage);
//                List<String[]> dataListFile = new ArrayList<>();
//                for (int i = 0; i < fileDataDtos.size(); i++) {
//                    String[] strings = new String[8];
//                    convertsToList(strings, fileDataDtos.get(i));
//                    dataListFile.add(strings);
//                }
//                log.info("更新csv文件数据：{}", JSON.toJSONString(dataListFile));
//                CSVUtils.writeDataListToCsvFile(CommonConstants.DATA_ROOT_PATH, CommonConstants.FUNC_PATH, dataListFile, false, CSVUtils.HEAD_ARR_FILE);
//            }
//        } else {
//            return "文件不存在";
//        }
//
//
//        return StatEnum.SUCCESS.getCode();
//    }
//
//    /**
//     * 获取功能块缓存
//     *
//     * @return
//     * @throws UnsupportedEncodingException
//     */
//    public List<FileDataDto> getFileDataDtosCached() throws UnsupportedEncodingException {
//        List<FileDataDto> fileDataDtos = sessionConfig.embeddedHazelcast().getList(CommonConstants.fileDataList);
//        if (fileDataDtos == null || fileDataDtos.size() == 0) {
//            //如果缓存jdbc为空，加载功能块CSV文件
//            List<String[]> datas = CSVUtils.importCsv(CommonConstants.DATA_ROOT_PATH, CommonConstants.FILE_DATA_PATH);
//            convertsToJdbc(datas, fileDataDtos);
//        }
//        return fileDataDtos;
//    }
//
//    /**
//     * 把csv文件读取的内容转成bean对象
//     *
//     * @param datas
//     * @param fileDataDtos
//     */
//    public void convertsToJdbc(List<String[]> datas, List<FileDataDto> fileDataDtos) throws UnsupportedEncodingException {
//        for (int i = 0; i < datas.size(); i++) {
//            String[] data = datas.get(i);
//            FileDataDto fileDataDto = new FileDataDto();
//            fileDataDto.setFileUid(data[0]);
//            fileDataDto.setFileName(URLDecoder.decode(data[1], "utf-8"));
//            fileDataDto.setFileType(data[2]);
//            fileDataDto.setUploadDate(data[3]);
//            fileDataDto.setTotalPage(data[4]);
//            fileDataDto.setCurrentPage(data[5]);
//            fileDataDto.setRemark(URLDecoder.decode(data[6], "utf-8"));
//            fileDataDto.setUsername(URLDecoder.decode(data[7], "utf-8"));
//            fileDataDtos.add(fileDataDto);
//        }
//    }
//
//    /**
//     * 把数据转换为数组
//     *
//     * @param data
//     * @param fileDataDto
//     */
//    public void convertsToList(String[] data, FileDataDto fileDataDto) throws UnsupportedEncodingException {
//        data[0] = fileDataDto.getFileUid();
//        data[1] = URLEncoder.encode(fileDataDto.getFileName(), "utf-8");
//        data[2] = fileDataDto.getFileType();
//        data[3] = fileDataDto.getUploadDate();
//        data[4] = fileDataDto.getTotalPage();
//        data[5] = "0";
//        if (StringUtils.isNotBlank(fileDataDto.getRemark())) {
//            data[6] = URLEncoder.encode(fileDataDto.getRemark(), "utf-8");
//        }
//        if (StringUtils.isNotBlank(fileDataDto.getUsername())) {
//            data[7] = URLEncoder.encode(fileDataDto.getUsername(), "utf-8");
//
//        }
//    }
//}
